"""
Python 元组 vs Java 数组/不可变列表 对比说明

+----------------+------------------------+------------------------+------------------------+
| 特性           | Python 元组            | Java 数组              | Java 不可变列表        |
+================+========================+========================+========================+
| 不可变性       | 完全不可变             | 长度不可变，但元素可变 | 完全不可变             |
+----------------+------------------------+------------------------+------------------------+
| 元素类型       | 异构（任意类型混合）   | 通常同构（或 Object[]）| 同构（泛型约束）       |
+----------------+------------------------+------------------------+------------------------+
| 创建语法       | (1, "a", True)         | new int[]{1, 2, 3}     | List.of(1, 2, 3)       |
+----------------+------------------------+------------------------+------------------------+
| 长度固定       | 是                     | 是                     | 是                     |
+----------------+------------------------+------------------------+------------------------+
| 内置支持       | 语言内置               | 语言内置               | Java 9+ 内置，或第三方库 |
+----------------+------------------------+------------------------+------------------------+
"""

# 1. 创建元组
t1 = 1, 2, 3               # 输出: (1, 2, 3)
t2 = (4, "five", 6.0)      # 输出: (4, 'five', 6.0)
t3 = (7,)                  # 单元素元组，输出: (7,)
t4 = tuple([8, 9, 10])     # 从列表转换，输出: (8, 9, 10)

# 2. 访问元素
t = (10, 20, 30, 40, 50)
print(t[0])         # 输出: 10
print(t[-1])        # 输出: 50（负索引从末尾开始）
print(t[1:3])       # 输出: (20, 30)
print(t[::2])       # 输出: (10, 30, 50)

# 3. 元组解包（Unpacking）
coords = (3, 4)
x, y = coords        # x=3, y=4
# 忽略部分元素
a, *rest, b = (1, 2, 3, 4)  # a=1, rest=[2, 3], b=4
# 交换变量
x, y = y, x          # 无需临时变量
print(x, y)

# 4. 内置方法
t = (1, 2, 2, 3, 2)
print(t.count(2))    # 输出: 3
print(t.index(3))    # 输出: 3

# 5. 元组运算
t1 = (1, 2)
t2 = (3, 4)
print(t1 + t2)       # 输出: (1, 2, 3, 4)
print(t1 * 3)        # 输出: (1, 2, 1, 2, 1, 2)

# 6. 成员检查
t = (1, 2, 3)
print(2 in t)        # 输出: True
print(4 not in t)    # 输出: True

# 7. 长度与遍历
t = (1, 'a', True)
print(len(t))        # 输出: 3

for item in t:
    print(item)      # 依次输出: 1, 'a', True